﻿using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
using UnityEngine.UIElements;

[CustomEditor(typeof(Waypoint))]
public class NewBehaviourScript : Editor
{
    Waypoint Waypoint => target as Waypoint; //相当于get{return ...}语法
    private void OnSceneGUI()
    {
        Handles.color= Color.green;
        for(int i = 0; i < Waypoint.Points.Length; i++)
        {
            EditorGUI.BeginChangeCheck();

            //创建把手
            Vector3 currentWaypointPosition = Waypoint.CurrentPosition + Waypoint.Points[i];
            var fmh_18_90_638228472547609176 = Quaternion.identity; 
            Vector3 newWaypointPoint = Handles.FreeMoveHandle(currentWaypointPosition,0.7f,new Vector3(0.3f, 0.3f,0.3f),Handles.SphereHandleCap);

            //创建下标，给路径点标号
            GUIStyle textStyle = new GUIStyle();
            textStyle.fontStyle = FontStyle.Bold;
            textStyle.fontSize = 16;
            textStyle.normal.textColor = Color.yellow;
            Vector3 textAlligment = Vector3.down * 0.35f + Vector3.right * 0.35f;
            Handles.Label(Waypoint.CurrentPosition + Waypoint.Points[i]+textAlligment,$"{i+1}",textStyle);

            EditorGUI.EndChangeCheck();

            if (EditorGUI.EndChangeCheck())
            {
                Undo.RecordObject(target, "Free Move Handle");
                Waypoint.Points[i] = newWaypointPoint - Waypoint.CurrentPosition; //路径点新位置=鼠标所在位置（世界坐标系）-Waypoint对象所在的坐标系（世界坐标系）（得到一个Waypoint对象的相对坐标系）
            }
        }
    }
}

/*
NewBehaviourScript 类继承自 Editor，并用 [CustomEditor(typeof(Waypoint))] 标记来指定该编辑器脚本适用于 Waypoint 组件。
在 OnSceneGUI() 方法中，我们可以在场景视图中进行自定义的绘制和交互逻辑。
首先，我们将 Handles.color 设置为绿色，用于绘制路径点的把手。
然后，通过迭代 Waypoint.Points 数组，为每个路径点创建把手。
使用 Handles.FreeMoveHandle() 方法创建把手，其中参数 currentWaypointPosition 是路径点的当前位置，0.7f 是把手的大小，
new Vector3(0.3f, 0.3f, 0.3f) 是把手的缩放，Handles.SphereHandleCap 是把手的样式。
接下来，我们创建一个下标标签，使用 Handles.Label() 方法，在路径点的位置上显示路径点的序号。
通过 EditorGUI.BeginChangeCheck() 和 EditorGUI.EndChangeCheck()，我们检测路径点的位置是否发生了改变。
如果路径点的位置发生了改变，我们使用 Undo.RecordObject() 将修改记录到撤销历史中，并更新 Waypoint.Points[i] 的值。
这样，当你在场景视图中拖动路径点的把手时，路径点的位置会实时更新，并且你可以撤销和重做这些修改。
*/